package modelo;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;


public class ProductoDAO {

	public ProductoDAO() {
		super();
	}
	public Producto getProductoPorNombre(String valor){
		
		String tiraSQL = "select * from productos where (nombre='"+valor+"')";
		ResultSet resultSet = Conexion.consultar(tiraSQL);
		Producto producto = null;
		try{
			while (resultSet.next()){
				int codp = resultSet.getInt("codp");
				String nombre= resultSet.getString("nombre");
				float precio= resultSet.getFloat("precio");
				String estatus=resultSet.getString("estatus");
				String cat = resultSet.getString("categoria");
				CategoriaDAO categoriaDAO = new CategoriaDAO();
				Categoria categoria = categoriaDAO.getCategoriaPorNombre(cat);
				producto = new Producto();
				producto.setCodP(codp);
				producto.setNombre(nombre);
				producto.setPrecio(precio);
				producto.setEstatus(estatus);
				producto.setCat(categoria);
				
				PreparacionDAO preparacionDAO = new PreparacionDAO();
				List<Preparacion> listPreparacion= preparacionDAO.consultarPreparacionPorProducto(producto);
				List<Ingrediente> ingredientesPro = new ArrayList<Ingrediente>();
				for (int i=0;i<listPreparacion.size();i++){
					Preparacion preparacion = listPreparacion.get(i);
					Ingrediente ingrediente = preparacion.getPk().getIngrediente();
					ingrediente.setCantidad(preparacion.getPorcion());
					ingredientesPro.add(ingrediente);
				}
				producto.setIngredientes(ingredientesPro);
			}
		}catch (SQLException e){
			e.printStackTrace();
		}
		return producto;
	}
	public Producto getProductoPorCodigo(int valor){
		Producto producto = null;
		String tiraSQL = "select * from productos where (codp='"+valor+"')";
		ResultSet resultSet = Conexion.consultar(tiraSQL);
		try{
			while (resultSet.next()){
				int codp = resultSet.getInt("codp");
				String nombre= resultSet.getString("nombre");
				float precio= resultSet.getFloat("precio");
				String estatus=resultSet.getString("estatus");
				String cat = resultSet.getString("categoria");
				CategoriaDAO categoriaDAO = new CategoriaDAO();
				Categoria categoria = categoriaDAO.getCategoriaPorNombre(cat);
				producto = new Producto();
				producto.setCodP(codp);
				producto.setNombre(nombre);
				producto.setPrecio(precio);
				producto.setEstatus(estatus);
				producto.setCat(categoria);
				
				PreparacionDAO preparacionDAO = new PreparacionDAO();
				List<Preparacion> listPreparacion= preparacionDAO.consultarPreparacionPorProducto(producto);
				List<Ingrediente> ingredientesPro = new ArrayList<Ingrediente>();
				for (int i=0;i<listPreparacion.size();i++){
					Preparacion preparacion = listPreparacion.get(i);
					Ingrediente ingrediente = preparacion.getPk().getIngrediente();
					ingrediente.setCantidad(preparacion.getPorcion());
					ingredientesPro.add(ingrediente);
				}
				producto.setIngredientes(ingredientesPro);
			}
		}catch (SQLException e){
			e.printStackTrace();
		}
		return producto;
	}
	public int tamañoTabla(){
		String tiraSQL = "select count(*) as num from productos";
		ResultSet resultSet = Conexion.consultar(tiraSQL);
		int tam= 0;
		try {
			while (resultSet.next()){
				tam = resultSet.getInt("num");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return tam;
	}
	public void incluir(Producto p){
		String tiraSQL = "insert into productos " +
				"(nombre, precio, categoria) values" +
				"('"+p.getNombre()+"','"+p.getPrecio()+"','"+p.getCat().getNombre()+"')";
		Conexion.ejecutar(tiraSQL);
		}
	
	public void actualizar(Producto p){
		String tiraSQL = "update productos set" +
				" nombre='"+p.getNombre()+"', precio ='"+p.getPrecio()+"',categoria='"+p.getCat()+"'" +
						"where (codi='"+p.getCodP()+"')";
		Conexion.ejecutar(tiraSQL);
	}
	public void eliminar(Producto p){
		String tiraSQL = "delete from productos where (codp='"+p.getCodP()+"')";
		Conexion.ejecutar(tiraSQL);
	}
	public List<Producto> consultarProductos(){
		List<Producto> productos = new ArrayList<Producto>();
		String tiraSQL ="select * from productos";
		ResultSet resultSet = Conexion.consultar(tiraSQL);
		try {
			while (resultSet.next()){
				int codp = resultSet.getInt("codp");
				String nombre= resultSet.getString("nombre");
				float precio= resultSet.getFloat("precio");
				String estatus=resultSet.getString("estatus");
				String cat = resultSet.getString("categoria");
				CategoriaDAO categoriaDAO = new CategoriaDAO();
				Categoria categoria = categoriaDAO.getCategoriaPorNombre(cat);
				Producto producto = new Producto();
				producto.setCodP(codp);
				producto.setNombre(nombre);
				producto.setPrecio(precio);
				producto.setEstatus(estatus);
				producto.setCat(categoria);
				
				PreparacionDAO preparacionDAO = new PreparacionDAO();
				List<Preparacion> listPreparacion= preparacionDAO.consultarPreparacionPorProducto(producto);
				List<Ingrediente> ingredientesPro = new ArrayList<Ingrediente>();
				for (int i=0;i<listPreparacion.size();i++){
					Preparacion preparacion = listPreparacion.get(i);
					Ingrediente ingrediente = preparacion.getPk().getIngrediente();
					ingrediente.setCantidad(preparacion.getPorcion());
					ingredientesPro.add(ingrediente);
				}
				producto.setIngredientes(ingredientesPro);
				productos.add(producto);
			}
		}catch (SQLException e){
			e.printStackTrace();
		}
		return productos;
	}
}
